import traceback

from baselines import BaseLine
from baselines.demo import DemoBaseLine
from flask import Flask, redirect, request
from common import construct_univeral_return_obj

######################################
#                                    #
#     请在下面添加自己的模型             #
#                                    #
######################################
my_baselines = {
    "demo": DemoBaseLine()
    # 在此添加
}

app = Flask(__name__)

@app.route("/")
def index():
    """跳转到主页面"""
    return redirect("/static/index.html")

@app.route("/baselines", methods=['GET', 'POST'])
def baselines():
    """
    获取系统中可能使用的模型列表
    :return: 模型列表
    """
    return construct_univeral_return_obj(list(my_baselines.keys()))

@app.route("/model/<name>/", methods=['GET', 'POST'])
def model(name):
    if (not name in  my_baselines.keys()):
        return construct_univeral_return_obj("你访问的模型并不存在！")

    if request.json == None:
        return construct_univeral_return_obj("请通过json格式正确传递参数")
    text = request.json.get("text") #也可能是form["text"]
    if not isinstance(text, str) or text == "":
        return construct_univeral_return_obj("请通过json格式正确传递text参数")

    m = my_baselines[name]
    if not isinstance(m, BaseLine):
        return construct_univeral_return_obj("错误的模型格式")

    try:
        results = m.preidct(text)
        # 返回模型计算的结构
        return construct_univeral_return_obj(results)
    except:
        traceback.print_exc()
        return construct_univeral_return_obj("500:内部服务发生错误")

if __name__ == '__main__':
    app.run("0.0.0.0", 8080)